//消消乐

// function play(key,timer,cb){
//     setTimeout(() => {
//         key++;  //下一关钥匙 
//         cb(key);
//     },timer)
// }

//回调地狱
// play(1,1000,(two) => {
//     console.log("第二关的钥匙",two);
//     play(two,1000,(three) => {
//         console.log("第三关的钥匙",three);
//         play(three,1000,(four) => {
//             console.log("第四关的钥匙",four);
//             //......
//         })
//     })
// })

//promise 解决回调地狱的问题

function play(key,timer){
    return new Promise((resolve,reject) => {
        setTimeout(() => {
            key++;
            resolve(key);  //进行中--->已成功
            // reject('error')
        },timer)
    })
}

// play(1,1000).then(two => {
//     console.log(two);
//     return play(two,1000)
// }).then(three => {
//     console.log(three);
//     return play(three,1000)
// }).then(four => {
//     console.log("第四关的钥匙",four)
// }).catch(e => {
//     console.log(e);
// }).finally(() => {
//     console.log("==345678")
// })


//async 函数 await  解决异步编程问题

async function run(){
    let two = await play(1,1000) //等待异步操作完成，把resolve的数据给前面的变量
    console.log(two);
    let three = await play(two,500)
    console.log(three)
    let four = await play(three,1000)
    console.log(four)
    return 1
}

//async 函数会把内部的返回值通过Promise.resolve()，处理成成功状态的promise实例

// console.log(run());

run().then(res => {
    console.log(res)
})

/**
 *              async 函数 和 普通函数的区别
 * 
 *调用方式：一致
 
  函数的返回值：promise对象      要看return，如果return，返回值就位undefined
 * 
*/

function fun(){
    // return 10
}

console.log(fun())
